package main

import (
	"fmt"
	"html/template"
	"log"
	"reflect"
	"youdu/config"

	"youdu/middleware/auth"

	"github.com/gin-contrib/sessions"
	"github.com/gin-contrib/sessions/cookie"
	"github.com/gin-gonic/gin"
)

func defaultTplValue(def interface{}, val interface{}) interface{} {
	// 检查 val 是否为空值
	if val == nil || (reflect.ValueOf(val).Kind() == reflect.String && val == "") {
		return def
	}
	return val
}
func startHttpServer() {
	if config.IsDevMode || config.Inst.App.Debug == 1 {
		gin.SetMode(gin.DebugMode)
	} else {
		gin.SetMode(gin.ReleaseMode)
	}
	// 创建Gin的默认引擎
	r := gin.Default()
	// 设置静态文件夹
	r.Static("/static", "./frontend/static")
	// 设置 session 存储引擎，使用 cookie 存储
	store := cookie.NewStore([]byte("secret"))
	r.Use(sessions.Sessions("vi", store))
	// 使用中间件
	r.Use(auth.YouduSSOAuth())
	// 自定义分隔符
	r.Delims("~{", "}~")
	// 定义自定义函数 default
	funcMap := template.FuncMap{
		"default": defaultTplValue,
	}
	r.SetFuncMap(funcMap)
	// 设置HTML模板文件夹
	r.LoadHTMLGlob("frontend/templates/**/*")

	// 添加路由
	route(r)

	// 启动HTTP服务器，默认监听在本地的8080端口
	// r.Run(fmt.Sprintf(":%d", config.Inst.Server.Port))

	// 使用自签名证书和私钥启动 HTTPS 服务
	// r.RunTLS(":443", "ssl\\cert.pem", "D:\\code\\_go\\youdu-jielong\\src\\ssl\\key.pem")
	r.RunTLS(fmt.Sprintf(":%d", config.Inst.Server.Port), currentDir+"/ssl/cert.pem", currentDir+"/ssl/key.pem")

	log.Println("Server started")
}
